{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 291,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#coding:utf-8\n",
    "%reload_ext autoreload \n",
    "%autoreload 2\n",
    "import os\n",
    "import sys\n",
    "project_basedir = '..'\n",
    "sys.path.append(project_basedir)\n",
    "from config import conf\n",
    "import json\n",
    "from matplotlib import pyplot as plt\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "plt.style.use('ggplot')\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 292,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "validate_dirs = os.listdir(conf.validate_dir)\n",
    "validate_dirs = [i for i in validate_dirs if i != '_blank']\n",
    "validate_dirs = sorted(validate_dirs)\n",
    "validate_dirs = [os.path.join(conf.validate_dir,i) for i in validate_dirs]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 293,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def add_score(onedic,key,point):\n",
    "    onedic.setdefault(key,0)\n",
    "    onedic[key] += point\n",
    "def cal_points(gameplays):\n",
    "    point_dic = {}\n",
    "    for onegame in gameplays:\n",
    "        if onegame[-3:] != 'cbf':\n",
    "            continue\n",
    "        winner = onegame.split('_')[-1].split('.')[0]\n",
    "        player1 = onegame.split('_')[-2].split('-')[0]\n",
    "        player2 = onegame.split('_')[-2].split('-')[1]\n",
    "        assert(winner in ['w','b','peace'])\n",
    "        if winner == 'w':\n",
    "            add_score(point_dic,player1,1)\n",
    "            add_score(point_dic,player2,0)\n",
    "        elif winner == 'b':\n",
    "            add_score(point_dic,player1,0)\n",
    "            add_score(point_dic,player2,1)\n",
    "        elif winner == 'peace':\n",
    "            add_score(point_dic,player1,0.5)\n",
    "            add_score(point_dic,player2,0.5)\n",
    "            add_score(point_dic,'peace',1)\n",
    "        else:\n",
    "            raise\n",
    "    return point_dic"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 294,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "game_numbers = [0]\n",
    "game_numbers_identity = [0]\n",
    "elu_points = [0]\n",
    "validate_games = [0]\n",
    "win_rate = [0]\n",
    "dates = ['start']\n",
    "peace_rates = [0]\n",
    "delta_elo = [0]\n",
    "for one_dir in validate_dirs:\n",
    "    one_date = one_dir.split('/')[-1]\n",
    "    gameplays = os.listdir(one_dir)\n",
    "    pointcdic = cal_points(gameplays)\n",
    "    game_num = len(gameplays)\n",
    "    \n",
    "    try:\n",
    "        gn = len(os.listdir(os.path.join(conf.history_selfplay_dir,one_date.replace('_noup',''))))\n",
    "    except:\n",
    "        gn = 0\n",
    "    game_numbers.append(game_numbers[-1] + gn)\n",
    "    game_numbers_identity.append(gn)\n",
    "    old_score = pointcdic['oldnet'] / game_num\n",
    "    peace_rate = pointcdic.get('peace',0) / game_num\n",
    "    elo = np.log10(1 / old_score - 1) * 400\n",
    "    elu_points.append(elu_points[-1] + elo)\n",
    "    validate_games.append(len(gameplays))\n",
    "    win_rate.append(1 - old_score)\n",
    "    dates.append(one_date)\n",
    "    peace_rates.append(peace_rate)\n",
    "    delta_elo.append(elo)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 295,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x7f696d94c518>"
      ]
     },
     "execution_count": 295,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f696d931160>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(10,5))\n",
    "plt.plot(game_numbers,elu_points,marker='o',mec='r',mfc='w',label='elo')\n",
    "plt.plot(game_numbers,delta_elo,marker='*',ms=10,label='delta elo')\n",
    "plt.legend()\n",
    "plt.xlabel(\"Game played\")\n",
    "plt.ylabel(\"Elo\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 296,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>dates</th>\n",
       "      <th>delta_elo</th>\n",
       "      <th>elu_points</th>\n",
       "      <th>game_numbers</th>\n",
       "      <th>game_numbers_identity</th>\n",
       "      <th>peace_rates</th>\n",
       "      <th>validate_games</th>\n",
       "      <th>win_rate</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>2018-08-12_22-13-25</td>\n",
       "      <td>52.755039</td>\n",
       "      <td>819.154675</td>\n",
       "      <td>247905</td>\n",
       "      <td>10074</td>\n",
       "      <td>0.292237</td>\n",
       "      <td>219</td>\n",
       "      <td>0.575342</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>2018-08-14_11-13-25</td>\n",
       "      <td>-7.933698</td>\n",
       "      <td>811.220977</td>\n",
       "      <td>258169</td>\n",
       "      <td>10264</td>\n",
       "      <td>0.292237</td>\n",
       "      <td>219</td>\n",
       "      <td>0.488584</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>2018-08-17_11-13-25</td>\n",
       "      <td>692.151387</td>\n",
       "      <td>1503.372365</td>\n",
       "      <td>258169</td>\n",
       "      <td>0</td>\n",
       "      <td>0.018265</td>\n",
       "      <td>219</td>\n",
       "      <td>0.981735</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>2018-08-18_04-13-25</td>\n",
       "      <td>-7.933698</td>\n",
       "      <td>1495.438667</td>\n",
       "      <td>268419</td>\n",
       "      <td>10250</td>\n",
       "      <td>0.182648</td>\n",
       "      <td>219</td>\n",
       "      <td>0.488584</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>2018-08-19_08-13-25</td>\n",
       "      <td>-35.020327</td>\n",
       "      <td>1460.418340</td>\n",
       "      <td>278427</td>\n",
       "      <td>10008</td>\n",
       "      <td>0.196347</td>\n",
       "      <td>219</td>\n",
       "      <td>0.449772</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>2018-08-20_14-13-25</td>\n",
       "      <td>7.933698</td>\n",
       "      <td>1468.352038</td>\n",
       "      <td>288543</td>\n",
       "      <td>10116</td>\n",
       "      <td>0.191781</td>\n",
       "      <td>219</td>\n",
       "      <td>0.511416</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>2018-08-21_21-13-25</td>\n",
       "      <td>-38.228665</td>\n",
       "      <td>1430.123373</td>\n",
       "      <td>298579</td>\n",
       "      <td>10036</td>\n",
       "      <td>0.223744</td>\n",
       "      <td>219</td>\n",
       "      <td>0.445205</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>2018-08-23_14-13-26_noup</td>\n",
       "      <td>4.759689</td>\n",
       "      <td>1434.883063</td>\n",
       "      <td>308622</td>\n",
       "      <td>10043</td>\n",
       "      <td>0.210046</td>\n",
       "      <td>219</td>\n",
       "      <td>0.506849</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>2018-08-24_18-13-25_noup</td>\n",
       "      <td>44.665434</td>\n",
       "      <td>1479.548497</td>\n",
       "      <td>318780</td>\n",
       "      <td>10158</td>\n",
       "      <td>0.296804</td>\n",
       "      <td>219</td>\n",
       "      <td>0.563927</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>2018-08-26_21-13-25_noup</td>\n",
       "      <td>11.109031</td>\n",
       "      <td>1490.657528</td>\n",
       "      <td>328807</td>\n",
       "      <td>10027</td>\n",
       "      <td>0.210046</td>\n",
       "      <td>219</td>\n",
       "      <td>0.515982</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                       dates   delta_elo   elu_points  game_numbers  \\\n",
       "17       2018-08-12_22-13-25   52.755039   819.154675        247905   \n",
       "18       2018-08-14_11-13-25   -7.933698   811.220977        258169   \n",
       "19       2018-08-17_11-13-25  692.151387  1503.372365        258169   \n",
       "20       2018-08-18_04-13-25   -7.933698  1495.438667        268419   \n",
       "21       2018-08-19_08-13-25  -35.020327  1460.418340        278427   \n",
       "22       2018-08-20_14-13-25    7.933698  1468.352038        288543   \n",
       "23       2018-08-21_21-13-25  -38.228665  1430.123373        298579   \n",
       "24  2018-08-23_14-13-26_noup    4.759689  1434.883063        308622   \n",
       "25  2018-08-24_18-13-25_noup   44.665434  1479.548497        318780   \n",
       "26  2018-08-26_21-13-25_noup   11.109031  1490.657528        328807   \n",
       "\n",
       "    game_numbers_identity  peace_rates  validate_games  win_rate  \n",
       "17                  10074     0.292237             219  0.575342  \n",
       "18                  10264     0.292237             219  0.488584  \n",
       "19                      0     0.018265             219  0.981735  \n",
       "20                  10250     0.182648             219  0.488584  \n",
       "21                  10008     0.196347             219  0.449772  \n",
       "22                  10116     0.191781             219  0.511416  \n",
       "23                  10036     0.223744             219  0.445205  \n",
       "24                  10043     0.210046             219  0.506849  \n",
       "25                  10158     0.296804             219  0.563927  \n",
       "26                  10027     0.210046             219  0.515982  "
      ]
     },
     "execution_count": 296,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.DataFrame({\n",
    "    'dates':dates,\n",
    "    'game_numbers':game_numbers,\n",
    "    'game_numbers_identity':game_numbers_identity,\n",
    "    'elu_points':elu_points,\n",
    "    'validate_games':validate_games,\n",
    "    'win_rate':win_rate,\n",
    "    'peace_rates':peace_rates,\n",
    "    'delta_elo':delta_elo,\n",
    "})[-10:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 301,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1168\r\n"
     ]
    }
   ],
   "source": [
    "!ls -l ../data/distributed/ | wc -l"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 302,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "180\r\n"
     ]
    }
   ],
   "source": [
    "!ls -l ../data/distributed/ | grep peace | wc -l"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 303,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2018年 08月 27日 星期一 00:34:22 CST\r\n"
     ]
    }
   ],
   "source": [
    "! date"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 300,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1]"
      ]
     },
     "execution_count": 300,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "list(range(1,2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "tf1.3_python",
   "language": "python",
   "name": "tf1.3_kernel"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
